package com.orangelife.service.propFeeComputeRule;

import java.util.List;
import java.util.Map;

import com.orangelife.exception.AppBizException;
import com.orangelife.service.propFeeComputeRule.model.PropFeeComputeRuleDto;
import com.orangelife.service.propFeeComputeRule.model.Rule;
import com.orangelife.webservice.service.propFeeComputeRule.entity.PropFeeComputeRule;

/*****************************************************************
 * Copyright(C) ORANGELIFE Corporation 2015. All Rights Reserved.
 *****************************************************************/
/*
 * ============================================================== 功能名
 * PropFeeComputeRule类的 service层的增删改查
 * 
 * @author @author
 * 
 * @version 1.1.0
 * 
 * @date 2016-07-25 10:41:10
 * ==============================================================
 */
public interface IPropFeeComputeRuleService {

	/**
	 * 用途 添加propFeeComputeRule（橙子生活）
	 * 
	 * @author
	 * @date创建时间 2016-07-25 10:41:10
	 * @param propFeeComputeRule
	 * @return
	 * @throws AppBizException
	 */
	public int addPropFeeComputeRule(PropFeeComputeRuleDto propFeeComputeRule)
			throws AppBizException;

	/****
	 * 添加常规计费方式
	 * 
	 * @param propFeeComputeRule
	 * @return
	 * @throws AppBizException
	 */
	public int addFeeComputeRule(PropFeeComputeRule propFeeComputeRule)
			throws AppBizException;

	/***
	 * 添加公摊公式
	 * 
	 * @param propFeeComputeRule
	 * @return
	 * @throws AppBizException
	 */
	public int addPoolTypeFeeComputeRule(PropFeeComputeRule propFeeComputeRule)
			throws AppBizException;

	/**
	 * 用途 修改propFeeComputeRule（橙子生活）
	 * 
	 * @author
	 * @date创建时间 2016-07-25 10:41:10
	 * @param propFeeComputeRule
	 * @return
	 * @throws AppBizException
	 */

	public int editPropFeeComputeRule(PropFeeComputeRuleDto propFeeComputeRule)
			throws AppBizException;

	/****
	 * 更新常规计费方式
	 * 
	 * @param propFeeComputeRule
	 * @return
	 * @throws AppBizException
	 */
	public int editFeeComputeRule(PropFeeComputeRule propFeeComputeRule)
			throws AppBizException;

	/***
	 * 修改公摊计费方式
	 * 
	 * @param propFeeComputeRule
	 * @return
	 * @throws AppBizException
	 */
	public int editPoolTypeFeeComputeRule(PropFeeComputeRule propFeeComputeRule)
			throws AppBizException;

	/**
	 * 用途 单个查询 （橙子生活）
	 * 
	 * @author
	 * @date创建时间 2016-07-25 10:41:10
	 * @param propFeeComputeRuleID
	 * @return
	 * @throws AppBizException
	 */

	public PropFeeComputeRuleDto findPropFeeComputeRuleByID(
			String propFeeComputeRuleID) throws AppBizException;

	/**
	 * 用途 逻辑删除（橙子生活）
	 * 
	 * @author
	 * @date创建时间 2016-07-25 10:41:10
	 * @param propFeeComputeRuleID
	 * @return
	 * @throws AppBizException
	 */
	public int deletePropFeeComputeRuleByLogic(String propFeeComputeRuleID,
			String edituserID) throws AppBizException;

	public int deletePropFeeComputeRule(PropFeeComputeRuleDto propFeeComputeRule)
			throws AppBizException;

	/**
	 * 用途 查询列表 （橙子生活）
	 * 
	 * @author
	 * @date 创建时间 2016-07-25 10:41:10
	 * @param search
	 *            搜索内容
	 * @param tsCreate
	 *            创建时间
	 * @param pageNo
	 *            页码
	 * @param pageSize
	 *            页面大小
	 * @return
	 * @throws AppBizExceptionception
	 */
	public List<Map<String, Object>> findPropFeeComputeRuleByPage(String type,
			String commID, String tsCreate, String search, int pageNo,
			int pageSize) throws AppBizException;

	/**
	 * 用途 查询列表（返回对对象）（橙子生活）
	 * 
	 * @author
	 * @date 创建时间 2016-07-25 10:41:10
	 * @param servletRequest
	 * @param search
	 *            搜索内容
	 * @param tsCreate
	 *            创建时间
	 * @param pageNo
	 *            页码
	 * @param pageSize
	 *            页面大小
	 * @return
	 * @throws AppBizException
	 */
	public List<PropFeeComputeRuleDto> getPropFeeComputeRuleByPage(
			String tsCreate, String search, int pageNo, int pageSize)
			throws AppBizException;

	/**
	 * 用途 根据一张表内的所有ID查询propFeeComputeRule（橙子生活）(返回Map<String, Object>)
	 * 
	 * @author
	 * @date 创建时间 2016-07-25 10:41:10
	 * @param ruleID
	 *            (非必填字段)
	 * 
	 * @param commID
	 *            (非必填字段)
	 * 
	 * @param feeTypeID
	 *            (非必填字段)
	 * 
	 * @param ruleType
	 *            (非必填字段)
	 * 
	 * @param roundType
	 *            (非必填字段)
	 * 
	 * @param periodType
	 *            (非必填字段)
	 * 
	 * @param status
	 *            (非必填字段)
	 * @return
	 * @throws AppBizException
	 */

	public List<Map<String, Object>> selectPropFeeComputeRuleByRelevantID(
			String ruleName, String ruleID, String commID, String feeTypeID,
			String ruleType, String roundType, String periodType, String status)
			throws AppBizException;

	/**
	 * 用途 根据一张表内的所有ID查询propFeeComputeRule（橙子生活）(返回对象)
	 * 
	 * @author
	 * @date 创建时间 2016-07-25 10:41:10
	 * @param ruleID
	 *            (非必填字段)
	 * 
	 * @param commID
	 *            (非必填字段)
	 * 
	 * @param feeTypeID
	 *            (非必填字段)
	 * 
	 * @param ruleType
	 *            (非必填字段)
	 * 
	 * @param roundType
	 *            (非必填字段)
	 * 
	 * @param periodType
	 *            (非必填字段)
	 * 
	 * @param status
	 *            (非必填字段)
	 * @return
	 * @throws AppBizException
	 */

	public List<PropFeeComputeRuleDto> findPropFeeComputeRuleByRelevantID(
			String ruleName, String ruleID, String commID, String feeTypeID,
			String ruleType, String roundType, String periodType, String status)
			throws AppBizException;

	/**
	 * 用途 批量查询propFeeComputeRule（橙子生活）(返回对象)
	 * 
	 * @author
	 * @date 创建时间 2016-07-25 10:41:10
	 * 
	 * @return
	 * @throws AppBizException
	 */

	public List<PropFeeComputeRuleDto> bauthfindPropFeeComputeRule(
			List<String> propFeeComputeRuleIDs) throws AppBizException;

	/**
	 * 用途 批量查询propFeeComputeRule（橙子生活）(返回Map)
	 * 
	 * @author
	 * @date 创建时间 2016-07-25 10:41:10
	 * 
	 * @return
	 * @throws AppBizException
	 */

	public List<Map<String, Object>> bauthfindPropFeeComputeRuleByMap(
			Map<String, Object> propFeeComputeRule) throws AppBizException;

	/****
	 * getFeeComputeRuleType
	 * 
	 * @param propFeeComputeRule
	 * @return
	 * @throws AppBizException
	 */
	public List<Map<String, Object>> getFeeComputeRuleType(
			Map<String, Object> propFeeComputeRule) throws AppBizException;

	/**
	 * 用途 清除
	 * 
	 * @author
	 * @date 创建时间 2016-07-25 10:41:10
	 * 
	 * @return
	 * @throws AppBizException
	 */

	public void clearCache() throws AppBizException;

	/***
	 * 获取其他费用
	 * 
	 * @param propFeeComputeRule
	 * @return
	 * @throws AppBizException
	 */
	public Map<String, Object> getOtherMoney(
			Map<String, Object> propFeeComputeRule) throws AppBizException;

	/**
	 * 根据校验规则是否具备生成条件
	 * 
	 * @author
	 * @date 创建时间 2016-07-25 10:41:10
	 * 
	 * @return
	 * @throws AppBizException
	 */

	public Rule checkRule(String commID, Rule rule) throws AppBizException;

	/**
	 * 根据规则ID获取规则关联的房屋
	 * 
	 * @author
	 * @date 创建时间 2016-07-25 10:41:10
	 * 
	 * @return
	 * @throws AppBizException
	 */

	public List<Map<String, Object>> getApartmentsByRuleID(String ruleID)
			throws AppBizException;

	/**
	 * 设置规则计算参数
	 * 
	 * @author
	 * @date 创建时间 2016-07-25 10:41:10
	 * 
	 * @return
	 * @throws AppBizException
	 */

	public Rule setRuleParam(Rule rule, Map<String, Object> apartmentInfo,
			Map<String, String> commparam) throws AppBizException;

	/**
	 * 根据规则ID计算
	 * 
	 * @author
	 * @date 创建时间 2016-07-25 10:41:10
	 * 
	 * @return
	 * @throws AppBizException
	 */

	public String completeRule(String ruleID, String commID, String apartmentID)
			throws AppBizException;

	/**
	 * 计算某房屋某几项缴费类目的费用
	 * 
	 * @author
	 * @date 创建时间 2016-07-25 10:41:10
	 * 
	 * @return List<Map<String,Object>>
	 * @throws AppBizException
	 */

	public List<Map<String, Object>> completeRule(String commID,
			String apartmentID, String[] feeTypeIDs, String startTime,
			String endTime) throws AppBizException;

}
